class Window:
    background = BackGround()
    elems = ElementList()
    def __init__(self): ...

    def addCallBack(callback: any):
        """ 
        Interface of callback:
            ``` callback(frameBuff: Tile, isNewFrame:int) ```
        """

# origin APIs


CP_MODE_COPY: int
CP_MODE_FILL: int
CP_MODE_Y_MIRROR: int
CP_MODE_X_MIRROR: int
CP_MODE_XY_MIRROR: int

COLOR_WHITE: int
COLOR_BLACK: int
COLOR_RED: int
COLOR_BLUE: int
COLOR_GREEN: int


def __init__(): ...
def create_region(x: int, y: int, w: int, h: int) -> Region: ...
def create_location(x: int, y: int) -> Location: ...
def update(): ...


class Tile:
    def __init__(self): ...
    def get_root(self, validRegion: Region, offset: Location) -> Tile: ...
    def generate_child(self, reg: Region, clipRegion: int) -> Tile: ...
    def width_compare(self, reference: Region) -> int: ...
    def height_compare(self, reference: Region) -> int: ...
    def shape_compare(self, reference: Region) -> int: ...
    def region_diff(self, tile: Tile) -> Region: ...
    def transform(self, reg: Region, centre: Location) -> int: ...
    def is_root_tile(self) -> int: ...
    def get_absolute_location(self) -> Location: ...


def is_point_inside_region(region: Region, location: Location) -> int: ...
def tile_copy(src: Tile, des: Tile, des_reg: Region, mode: int) -> int: ...
def tile_rotation(src:Tile, des: Tile, des_reg: Region, centre: Location, angle: float, mask_color: int) -> int: ...
def alpha_blending(src: Tile, des: Tile, reg: Region, alp: int) -> int: ...
def fill_colour(tile: Tile, reg: Region, colour: int) -> int: ...


class Region:
    def __init__(self): ...
    def intersect(self, in2: Region) -> Region: ...


class Location:
    def __init__(self): ...


class Star(Tile):
    def __init__(self): ...

# high level APIs


class BackGround:
    def __init__(self): ...
    def setColor(self, color: int): ...
    def getColor(self) -> int: ...
    def update(self): ...


class ElementList:
    def update(self): ...


class Element:
    def __init__(self): ...
    def move(self, x: int, y: int): ...
    def right(self, x: int): ...
    def lift(self, x: int): ...
    def up(self, y: int): ...
    def down(self, y: int): ...
    def update(self): ...
    def setAlpha(self, alpha: int): ...


class Box(Element):
    # override
    def update(self): ...
    def __init__(self): ...
    def setColor(self, color: int): ...
    def setSize(self, x: int, y: int): ...
